problem s ComponentCount

Otázka od: delphin@centrum.sk

6. 12. 2002 9:35

Zdar !

.. v DesignTime som si na TGroupBox hodil 6 CheckBoxov, kedze
kazdy z nich ma rovnaky event onClick, tak som si urobil jeden
univerzalny event, kde som chcel pristupovat k jednotlivym
CheckBoxom..
.. urobil som nieco taketo..

  for i := 0 to GroupBox.ComponentCount - 1 do
    TCheckBox(GroupBox.Components[i]).Checked := .....

..na moje prekvapenie mi vsak GroupBox.ComponentCount dava vzdy
0 !!!
.. pozeral som si Sender tohto onClick eventu.. a jeho
parent.ClassName je TGroupBox !!!


..ked som si uz hodnu chvilu nevedel pomoct, tak som urobil
dynamicke createovanie jednotlivych CheckBoxov

  CheckBox := TCheckBox.Create(GroupBox)
  CheckBox.Parent := GroupBox ....

a to uz fungovalo spravne, GroupBox.ComponentCount mi daval
6..pripada mi to divne, ako keby v DesignTime nemali CheckBoxy
ownera, len parenta a preto ma potom GroupBox blby
ComponentCount...
.. vysvetli mi to niekto prosim ?

Dik

----------------------------------------------------------------
http://www.webpark.sk/novy-web.htm - Profesionálny webhosting

Odpovedá: Ondrej Kelle

6. 12. 2002 10:35

> .. v DesignTime som si na TGroupBox hodil 6 CheckBoxov, kedze
> kazdy z nich ma rovnaky event onClick, tak som si urobil jeden
> univerzalny event, kde som chcel pristupovat k jednotlivym
> CheckBoxom..
> .. urobil som nieco taketo..
>
> for i := 0 to GroupBox.ComponentCount - 1 do
> TCheckBox(GroupBox.Components[i]).Checked := .....
>
> ..na moje prekvapenie mi vsak GroupBox.ComponentCount dava vzdy
> 0 !!!
> .. pozeral som si Sender tohto onClick eventu.. a jeho
> parent.ClassName je TGroupBox !!!

Owner a Parent su dve celkom odlisne veci.
Owner je vlastnikom komponent, ktory je zodpovedny za uvolnenie vlastnenych
komponent pri svojom vlastnom uvolneni. Ked v designtime davas rozne
komponenty na formular, ich Owner je vecsinou ten formular, bez ohladu na
Parenta. Napriklad Button1 (TButton), ktory umiestnis na Panel1 (TPanel),
ktory je umiestneny na Form1 (TForm1), tento Button1 ma Form1 ako Owner a
Panel1 ako Parent.
Vlastnene komponenty mozes prechadzat pomocou
for I := 0 to ComponentCount - 1 do
  with Components[I] do
    ...
Parent je vizualny kontajner, rodicovske okno v zmysle Windows, tzn. musi to
byt potomok TWinControl. Child okna mozes prechadzat pomocou
for I := 0 to ControlCount - 1 do
  with Controls[I] do
    ...

HTH
TOndrej

Odpovedá: Ing. Pavel Žilinec

6. 12. 2002 10:40

Ja pouzivam misto ComponentCount ControlCount (a pak Controls[i]) a bez
problemu. Zkus
toto a treba Ti to projde  

--------
ing. Pavel Zilinec
MailTo:zilinec@email.cz

Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju

dcs> .. v DesignTime som si na TGroupBox hodil 6 CheckBoxov, kedze
dcs> kazdy z nich ma rovnaky event onClick, tak som si urobil jeden
dcs> univerzalny event, kde som chcel pristupovat k jednotlivym
dcs> CheckBoxom..
dcs> .. urobil som nieco taketo..

dcs> for i := 0 to GroupBox.ComponentCount - 1 do
dcs> TCheckBox(GroupBox.Components[i]).Checked := .....

dcs> ..na moje prekvapenie mi vsak GroupBox.ComponentCount dava vzdy
dcs> 0 !!!
dcs> .. pozeral som si Sender tohto onClick eventu.. a jeho
dcs> parent.ClassName je TGroupBox !!!


dcs> ..ked som si uz hodnu chvilu nevedel pomoct, tak som urobil
dcs> dynamicke createovanie jednotlivych CheckBoxov

dcs> CheckBox := TCheckBox.Create(GroupBox)
dcs> CheckBox.Parent := GroupBox ....

dcs> a to uz fungovalo spravne, GroupBox.ComponentCount mi daval
dcs> 6..pripada mi to divne, ako keby v DesignTime nemali CheckBoxy
dcs> ownera, len parenta a preto ma potom GroupBox blby
dcs> ComponentCount...
dcs> .. vysvetli mi to niekto prosim ?

Odpovedá: Jan Sebelík

6. 12. 2002 12:14

> Odesílatel: delphin@centrum.sk
> .. v DesignTime som si na TGroupBox hodil 6 CheckBoxov, kedze
> for i := 0 to GroupBox.ComponentCount - 1 do
> TCheckBox(GroupBox.Components[i]).Checked := .....
Ten GroupBox nic nevlastni.
Vlastnikem vsech komponent na formulari je formular. Teda kdyz jsme je tam
polozili v design time.

GroupBox je Parent tech CheckBoxu.
Musis

> for i := 0 to GroupBox.ControlCount - 1 do
> TCheckBox(GroupBox.Controls[i]).Checked := .....

Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 493 792 931 (mobil 776 347735)
=========================================